package com.erp.erp_ui.business.controller;

import com.alibaba.fastjson.JSONObject;
import com.erp.erp_entitys.User.UserEntity;
import com.erp.erp_entitys.business.req.QueryTaskStatisticsOneReq;
import com.erp.erp_entitys.business.req.QueryTaskStatisticsTwoReq;
import com.erp.erp_entitys.business.rsp.QueryTaskStatisticsOneRes;
import com.erp.erp_entitys.business.rsp.QueryTaskStatisticsTwoRes;
import com.erp.erp_ui.base.Base;
import com.erp.erp_ui.business.req.*;
import com.erp.erp_ui.business.service.TaskService;
import com.erp.erp_ui.business.vo.*;
import com.erp.erp_ui.money.req.OperationReq;
import com.erp.utils.R;
import com.erp.utils.ResultStatusEnum;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @ClassName : TaskController
 * @Description : 出口业务-任务-控制层
 * @Author : lst
 * @Date: 2021-01-18 02:43
 */
@Controller
@RequestMapping(value = "task")
public class TaskController extends Base {

    /**
     * 日志
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(TaskController.class);

    /**
     * 任务业务逻辑层接口
     */
    private final TaskService taskService;

    @Autowired
    public TaskController(TaskService taskService) {
        this.taskService = taskService;
    }


    /**
     * 新增、修改
     * @param req 新增、修改入参
     * @return 新增、修改结果
     */
    @PostMapping("/add")
    @ResponseBody
    public R add(@Validated @RequestBody AddTaskReq req){
        try {
            LOGGER.info("出口业务-任务-新增、修改 req=" + req.toString());
            UserEntity user = (UserEntity)this.getBean("user");
            String name = user.getName();
            String code = user.getCode();
            return taskService.add(req, name, code);
        }catch (Exception e){
            LOGGER.info("出口业务-任务-新增、修改异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 首页-分页列表查询
     *
     * @param req 查询参数
     * @return 任务信息
     */
    @GetMapping("/getListByPage")
    @ResponseBody
    public R getListByPage(TaskPageListReq req) {
        try {
            LOGGER.info("首页-分页列表查询 req=" + req.toString());
            PageInfo<TaskPageListVo> pageInfo = taskService.getListByPage(req);
            return R.build(0, "", pageInfo.getTotal(), pageInfo.getList());
        } catch (Exception e) {
            LOGGER.info("首页-分页列表查询异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 首页-列表查询
     *
     * @param req 查询参数
     * @return 任务信息
     */
    @GetMapping("/getList")
    @ResponseBody
    public R getList(TaskPageListReq req) {
        try {
            LOGGER.info("首页-列表查询 req=" + req.toString());
            List<TaskPageListVo> list = taskService.getList(req);
            return R.build(list);
        } catch (Exception e) {
            LOGGER.info("首页-列表查询异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 详情
     * @param id 详情id
     * @return 详情信息
     */
    @GetMapping("/detail")
    @ResponseBody
    public R detail(Integer id){
        try {
            LOGGER.info("出口业务-任务-详情：id=" + id);
            TaskDetailVo detailVo = taskService.detail(id);
            return R.build(detailVo);
        }catch (Exception e){
            LOGGER.info("出口业务-任务-详情异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 出口业务-删除
     * @param req 删除条件
     * @return 删除结果
     */
    @PostMapping("/delete")
    @ResponseBody
    public R delete(@RequestBody OperationReq req) {
        try {
            LOGGER.info("出口业务-任务-删除 req=" + req);
            taskService.delete(req);
            return R.build("");
        } catch (Exception e) {
            LOGGER.info("出口业务-任务-删除异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }

    }

    /**
     * 数据操作接口
     * @param req
     * @return
     */
    @PostMapping("/operation")
    @ResponseBody
    public R operation(@RequestBody OperationReq req) {
        try {
            LOGGER.info("出口业务-任务-数据操作接口 req=" + req);
            return taskService.operation(req);
        } catch (Exception e) {
            LOGGER.info("出口业务-任务-数据操作接口异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 导入-获取备货主表信息
     * @param req 查询条件入参实体
     * @return 备货主表信息
     */
    @GetMapping("/import/getTaskByPage")
    @ResponseBody
    public R getTaskByPage(ImportTaskReq req){
        try {
            LOGGER.info("出口业务-任务-导入-获取备货主表信息：req=" + req.toString());
            PageInfo<ImportTaskVo> pageInfo = taskService.getTaskByPage(req);
            return R.build(0, "", pageInfo.getTotal(), pageInfo.getList());
        }catch (Exception e){
            LOGGER.info("出口业务-任务-导入-获取备货主表信息异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 导入-获取备货产品信息(分页)
     * @param id 备货主表id
     * @return 备货产品信息
     */
    @GetMapping("/import/getTaskProductByPage")
    @ResponseBody
    public R getTaskProductByPage(Integer id){
        try {
            LOGGER.info("出口业务-任务-导入-获取备货产品信息(分页)：id=" + id);
            PageInfo<ImportTaskProductVo> pageInfo = taskService.getTaskProductByPage(id);
            return R.build(0, "", pageInfo.getTotal(), pageInfo.getList());
        }catch (Exception e){
            LOGGER.info("出口业务-任务-导入-获取备货产品信息(分页)异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 导入-获取备货产品信息(不分页)
     * @param id 备货主表id
     * @return 备货产品信息
     */
    @GetMapping("/import/getTaskProduct")
    @ResponseBody
    public R getTaskProduct(Integer id){
        try {
            LOGGER.info("出口业务-任务-导入-获取备货产品信息(不分页)：id=" + id);
            List<ImportTaskProductVo> productVoList = taskService.getTaskProduct(id);
            return R.build(productVoList);
        }catch (Exception e){
            LOGGER.info("出口业务-任务-导入-获取备货产品信息(不分页)异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 导入-获取备货产品配件信息(分页)
     * @param id 备货产品id
     * @return 备货产品配件信息
     */
    @GetMapping("/import/getTaskProductPartsByPage")
    @ResponseBody
    public R getTaskProductPartsByPage(Integer id){
        try {
            LOGGER.info("出口业务-备货-导入-获取备货产品配件信息：id=" + id);
            PageInfo<ImportTaskProductPartsVo> pageInfo = taskService.getTaskProductPartsByPage(id);
            return R.build(0, "", pageInfo.getTotal(), pageInfo.getList());
        }catch (Exception e){
            LOGGER.info("出口业务-备货-导入-获取备货产品配件信息异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 导入-获取备货产品配件信息(不分页)
     * @param id 备货产品id
     * @return 备货产品配件信息
     */
    @GetMapping("/import/getTaskProductParts")
    @ResponseBody
    public R getTaskProductParts(Integer id){
        try {
            LOGGER.info("出口业务-备货-导入-获取备货产品配件信息(不分页)：id=" + id);
            List<ImportTaskProductPartsVo> partsVoList = taskService.getTaskProductParts(id);
            return R.build(partsVoList);
        }catch (Exception e){
            LOGGER.info("出口业务-备货-导入-获取备货产品配件信息(不分页)异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 获取当月备货量
     * @return 当月备货量
     */
    @GetMapping("/statistics/getTaskCount")
    @ResponseBody
    public R getTaskCount(){
        try {
            LOGGER.info("出口业务-备货-获取当月备货量信息：id=");
            UserEntity user = (UserEntity)this.getBean("user");
            String name = user.getName();
            String code = user.getCode();
            long count = taskService.getTaskCount(name, code);
            return R.build(count);
        }catch (Exception e){
            LOGGER.info("出口业务-备货-获取当月备货量异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }


    /**
     * 任务(备货合同)产品交期一览表-统计
     *
     * @param req 查询参数
     * @return 任务信息
     */
    @GetMapping("getTaskStatisticsOneListByPage")
    @ResponseBody
    public R getTaskStatisticsOneListByPage(QueryTaskStatisticsOneReq req) {
        try {
            LOGGER.info("任务(备货合同)产品列表-统计 req=" + req.toString());
            PageInfo<QueryTaskStatisticsOneRes> pageInfo = taskService.getTaskStatisticsOneListByPage(req);
            return R.build(0, "", pageInfo.getTotal(), pageInfo.getList());
        } catch (Exception e) {
            LOGGER.info("任务(备货合同)产品列表-统计异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }
    /**
     * 任务(备货合同)产品交期一览表-导出
     *
     * @param req 查询参数
     * @return 任务信息
     */
    @GetMapping("getTaskStatisticsOneListExport")
    @ResponseBody
    public R getTaskStatisticsOneListExport(QueryTaskStatisticsOneReq req) {
        try {
            LOGGER.info("任务(备货合同)产品列表-导出 req=" + req.toString());
            JSONObject info= taskService.getTaskStatisticsOneListExport(req);
            return R.build(info);
        } catch (Exception e) {
            LOGGER.info("任务(备货合同)产品列表-导出异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }



    /**
     * 备货采购情况-统计
     *
     * @param req 查询参数
     * @return 任务信息
     */
    @GetMapping("getTaskPurchaseStatisticsListByPage")
    @ResponseBody
    public R getTaskPurchaseStatisticsListByPage(QueryTaskStatisticsTwoReq req) {
        try {
            LOGGER.info("备货采购情况-统计 req=" + req.toString());
            PageInfo<QueryTaskStatisticsTwoRes> pageInfo = taskService.getTaskPurchaseStatisticsListByPage(req);
            return R.build(0, "", pageInfo.getTotal(), pageInfo.getList());
        } catch (Exception e) {
            LOGGER.info("备货采购情况-统计异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }
    /**
     * 备货采购情况-导出
     *
     * @param req 查询参数
     * @return 任务信息
     */
    @GetMapping("getTaskPurchaseStatisticsListExport")
    @ResponseBody
    public R getTaskPurchaseStatisticsListExport(QueryTaskStatisticsTwoReq req) {
        try {
            LOGGER.info("备货采购情况-导出 req=" + req.toString());
            JSONObject info= taskService.getTaskPurchaseStatisticsListExport(req);
            return R.build(info);
        } catch (Exception e) {
            LOGGER.info("备货采购情况-导出异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }



    /**
     * 校验是否可以回退数据 1:采购调用  0:未被调用
     *
     * @param id     备货主表id
     * @param billNo 备货单号
     * @return 1:采购调用  0:未被调用
     */
    @GetMapping("/checkIsCanModified")
    @ResponseBody
    public R checkIsCanModified(Integer id, String billNo) {
        try {
            LOGGER.info("出口业务-任务(备货合同)-校验是否可修改 id=" + id + ",billNo=" + billNo);
            int result = taskService.checkDataIsRollBackByBillNo(id, billNo);
            return R.build(result);
        } catch (Exception e) {
            LOGGER.info("出口业务-任务(备货合同)-校验是否可修改异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }
}
